<?


JCAT_Package::ImportClass('JCAT_Controller',JCAT::PACKAGE_MVC) ;


class OpenCoderDocument extends JCAT_Controller 
{
	
	/**
	 * what's this
	 * 
	 * @access	public
	 * @return	void
	 */
	public function OpenCoderDocument()
	{
		$this->JCAT_Controller(__CLASS__) ;
	}

	/**
	 * what's this
	 * 
	 * @access	public
	 * @param 	$sDocument	string
	 * @return	void
	 */
	public function MainRun( $arrArgv=array() )
	{
	    $sDocumentPath = isset($arrArgv['path'])? $arrArgv['path']: '' ;
	    
	    if(!$sDocumentPath)
	    {
	    	JCAT_Package::ImportClass('JCAT_GtkFSDialog',JCAT::PACKAGE_MVCGTK) ;
	    	$sDocumentPath = JCAT_GtkFSDialog::Choose( 
	    		Gtk::FILE_CHOOSER_ACTION_OPEN
	    		, null
	    		, 'php	*.php|*.phpd|*.php5'
	    	) ;
	    	
	    	if( $sDocumentPath===null )
	    	{
	    		return ;
	    	}
	    }
	    
		JCAT_ASSERT::ASSERT_FILE($sDocumentPath,JCAT_Language::Sentence('路径：“%s”不是一个存在的文件。',$sDocumentPath)) ;

		// 读取 文档数据
		$sByte = CoderDocBase::ReadUnmodifiableBlock($sDocumentPath,'Coder Dialog Data') ;
		$sDocumentClassName = JCAT_ArchiveDocument::ExtractDocumentClassInSerializeData($sByte) ;

		// 检查文档类型
		if ( !JCAT_Global::IsKindOf($sDocumentClassName,'IToolboxCoderDocument') )
		{
		    if( !isset($arrArgv['bNoAlert']) or !$arrArgv['bNoAlert'] )
		    {
		    	JCAT_Gtk::MsgDlg(JCAT_Language::Sentence('文件：“%s”不是由“%s”产生的有效代码。',$sDocumentPath,PROJECT_NAME)) ;
		    }
		    return ;
		}
		
		// 检查 控制器 类型
		$sControllerClassName = call_user_func(array($sDocumentClassName,'GetControllerClassName')) ;
		JCAT_ASSERT::ASSERT_IMPLEMENTS($sControllerClassName,'IToolboxCoder') ;
		
		// 创建控制器
        $aController = new $sControllerClassName() ;
        
        // 执行 控制器
        $arrArgv['path'] = $sDocumentPath ;
        $aController->MainRun(&$arrArgv) ;
	}
}

?>